var prefix = "/jzweb/trackDrawNanNing";
var isDrawing = null; // 标记是否正在进行抽签

let falg = false;
var timerId
var types = null
var totals = 0
var data = []
var indexs = 0
let dynamicVariables = {};
var pageIndex = new Set()
var pageValue = 1
var flag1 = true


 $( function() {
    load();
});

$(document).ready(  function() {
    lottery()
});

function load() {

    $('#exampleTable')
        .bootstrapTable(
            {
                method : 'get', // 服务器数据的请求方式 get or post
                url : prefix + '/trackList', // 服务器数据的加载地址
                //	showRefresh : true,
                //	showToggle : true,
                //	showColumns : true,
                iconSize : 'outline',
                toolbar : '#exampleToolbar',
                theadClasses: "thead-dark",
                striped : true, // 设置为true会有隔行变色效果
                dataType : "json", // 服务器返回的数据类型
                pagination : false, // 设置为true会在底部显示分页条
                singleSelect : false, // 设置为true将禁止多选
                // contentType : "application/x-www-form-urlencoded",
                // //发送到服务器的数据编码类型
                pageSize : 15, // 如果设置了分页，每页数据条数
                pageNumber : 1, // 如果设置了分布，首页页码
                //search : true, // 是否显示搜索框
                showColumns : false, // 是否显示内容下拉框（选择显示的列）
                sidePagination : "server", // 设置在哪里进行分页，可选值为"client" 或者 "server"
                queryParamsType : "",
                // //设置为limit则会发送符合RESTFull格式的参数
                queryParams : function(params) {
                    return {
                        //说明：传入后台的参数包括offset开始索引，limit步长，sort排序列，order：desc或者,以及所有列的键值对
                        // pageNumber : params.pageNumber,
                        // pageSize : params.pageSize,
                        // unitName:$('#unitName').val(),
                        // username:$('#searchName').val()
                    };
                },

                responseHandler : function(res){
                    if(res.code !== '0') {
                        layer.msg(res.msg);
                        return false
                    }
                    data = res.data.trackDrawDOList
                    isDrawing = res.data.hasDraw
                    let pageSizes = 20;
                    let currentPages = 1;

                    let startIndex = (currentPages - 1) * pageSizes;
                    let endIndex = startIndex + pageSizes;

                    let pages = Math.ceil(data.length / 20)
                    for (let i = 0; i < pages; i++) {
                        dynamicVariables[`indexs${i+1}`] = 0
                    }

                    let currentPageData = data.slice(startIndex, endIndex);
                    totals = res.data.trackDrawDOList.length
                    // 分页
                    pagings(totals)

                    return {
                        "rows": currentPageData, //数据
                        "total": res.data.length,//总数
                    };
                },
                columns : [
                    {
                        field : 'unitName',
                        title : '参赛院校',
                        align : 'center',
                    },

                    {
                        field : 'name',
                        title : '参赛选手一',
                        class : 'name',
                        formatter : function(value, row, index) {
                            console.log(isDrawing)
                            if(isDrawing) {
                                if(row?.pageNum * 1 === pageValue ) {
                                    if(row?.flagUpdate === '1') {
                                        return  value
                                    }else if(row?.flagUpdate === '3') {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }else {
                                let arr =Array.from(pageIndex)
                                let foundItem = arr.find(item => item.pages === pageValue);
                                console.log(foundItem)
                                if(foundItem?.pages === pageValue) {
                                    if(foundItem?.types.has(1)) {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }
                            // return '-'


                        }
                    },
                    {
                        field : 'track',
                        title : '赛道',
                        class : 'placeNum1',
                        formatter : function(value, row, index) {
                            return value
                            // if(isDrawing) {
                            //     return  value
                            // }
                            // return '-'

                        }
                    },
                    {
                        field : 'placeNum',
                        title : '场次',
                        class : 'placeNum',
                        formatter : function(value, row, index) {
                            if(isDrawing) {
                                if(row?.pageNum * 1 === pageValue ) {
                                    if(row?.flagUpdate === '2') {
                                        return  value
                                    }else if(row?.flagUpdate === '3') {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }else {
                                let arr =Array.from(pageIndex)
                                let foundItem = arr.find(item => item.pages === pageValue);
                                if(foundItem?.pages === pageValue) {
                                    if(foundItem?.types.has(2)) {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }
                        }
                    },
                    {
                        field : 'track3',
                        title : '检录号',
                        class : 'registration',
                        formatter : function(value, row, index) {
                            if(isDrawing) {
                                if(row?.pageNum * 1 === pageValue ) {
                                    if(row?.flagUpdate === '2') {
                                        return  value
                                    }else if(row?.flagUpdate === '3') {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }else {
                                let arr =Array.from(pageIndex)
                                let foundItem = arr.find(item => item.pages === pageValue);
                                if(foundItem?.pages === pageValue) {
                                    if(foundItem?.types.has(2)) {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }
                        }
                    },

                    {
                        field : 'name2',
                        title : '参赛选手二',
                        class : 'name',
                        formatter : function(value, row, index) {
                            if(isDrawing) {
                                if(row?.pageNum * 1 === pageValue ) {
                                    if(row?.flagUpdate === '1') {
                                        return  value
                                    }else if(row?.flagUpdate === '3') {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }else {
                                let arr =Array.from(pageIndex)
                                let foundItem = arr.find(item => item.pages === pageValue);
                                if(foundItem?.pages === pageValue) {
                                    if(foundItem?.types.has(1)) {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }
                        }
                    },
                    {
                        field : 'track2',
                        title : '赛道',
                        class : 'track1',
                        formatter : function(value, row, index) {
                            // if(isDrawing) {
                            //     return  value
                            // }
                            // return '-'
                            return value
                            // let arr =Array.from(pageIndex)
                            // let foundItem = arr.find(item => item.pages === pageValue);
                            // if(foundItem?.pages === pageValue) {
                            //     if(foundItem?.types === 2) {
                            //         return  value
                            //     }else {
                            //         if(foundItem?.indexs >= 2) {
                            //             return  value
                            //         }
                            //         return '-'
                            //     }
                            // }else {
                            //     return '-'
                            // }

                        }
                    },
                    {
                        field : 'placeNum2',
                        title : '场次',
                        class : 'placeNum',
                        formatter : function(value, row, index) {
                            if(isDrawing) {
                                if(row?.pageNum * 1 === pageValue ) {
                                    if(row?.flagUpdate === '2') {
                                        return  value
                                    }else if(row?.flagUpdate === '3') {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }else {
                                let arr =Array.from(pageIndex)
                                let foundItem = arr.find(item => item.pages === pageValue);
                                if(foundItem?.pages === pageValue) {
                                    if(foundItem?.types.has(2)) {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }
                        }
                    },

                    {
                        field : 'placeNum3',
                        title : '检录号',
                        class : 'registration',
                        formatter : function(value, row, index) {
                            if(isDrawing) {
                                if(row?.pageNum * 1 === pageValue ) {
                                    if(row?.flagUpdate === '2') {
                                        return  value
                                    }else if(row?.flagUpdate === '3') {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }else {
                                let arr =Array.from(pageIndex)
                                let foundItem = arr.find(item => item.pages === pageValue);
                                if(foundItem?.pages === pageValue) {
                                    if(foundItem?.types.has(2)) {
                                        return  value
                                    }
                                    return '-'
                                }else {
                                    return '-'
                                }
                            }
                        }
                    },
                ]
            });
}

function pagings(total) {
    layui.use(['laypage', 'layer'], function(){
        let laypage = layui.laypage;
        laypage.render({
            elem: 'demo7',
            count: total, // 数据总数
            layout: ['prev', 'next', 'page'],
            limit: 20, // 每页显示的数据条数
            jump:async function(obj, first){
                //obj 包含当前页码等信息
                let datas = await pageCreate(data,20,obj.curr)
                pageValue = obj.curr
                $('#exampleTable').bootstrapTable('load', datas);
            }
        });
    });
}

function pageCreate(data,size,page) {
    let pageSizes = size;
    let currentPages = page;

    let startIndex = (currentPages - 1) * pageSizes;
    let endIndex = startIndex + pageSizes;
    let currentPageData = data.slice(startIndex, endIndex);
    return currentPageData
}

function reLoad() {
    $('#exampleTable').bootstrapTable('refresh');
}

function add() {
    layer.open({
        type : 2,
        title : '增加',
        maxmin : true,
        shadeClose : false, // 点击遮罩关闭层
        area : [ '800px', '520px' ],
        content : prefix + '/add' // iframe的url
    });
}

function edit(id) {
    layer.open({
        type : 2,
        title : '编辑',
        maxmin : true,
        shadeClose : false, // 点击遮罩关闭层
        area : [ '800px', '520px' ],
        content : prefix + '/edit/' + id // iframe的url
    });
}


//导出
function downExcelModelFile() {
    layer.confirm('您确定要导出吗？', {
        btn1:function(index){
            let pages = Math.ceil(data.length /20)
            let arr = Array.from(pageIndex)
            let allIndexesGreaterThanTwo = arr.every(item => item.indexs >= 2);

            if(pages !== arr.length) return layer.msg('请先完成抽签')
            if(!allIndexesGreaterThanTwo) return layer.msg('请先完成抽签')

            try {
                window.location.href = "/jzweb/trackDrawNanNing/downloadImportTemplate";
                layer.close(index)
            }catch (e) {
                layer.msg('导出失败')
            }

        }
    });


}



// 抽签
function trackDrawCreate() {
    return  new Promise(function (resolve) {
        $.ajax({
            type : "get",
            url : prefix +`/trackList`,
            async : false,
            error : function(request) {
                parent.layer.alert(request);
            },
            success : function(res) {
                if (res.code === '0') {
                    data = res.data.trackDrawDOList

                    let list = pageCreate(res.data.trackDrawDOList,20,pageValue)
                    $('#exampleTable').bootstrapTable('load',list)
                    layer.msg('抽签完毕')
                } else {
                    parent.layer.alert(res.msg)
                }

            }
        });
    })

}

function add() {
    return  new Promise(function (resolve) {
        $.ajax({
            type : "get",
            url : prefix +`/list`,
            async : false,
            error : function(request) {
                parent.layer.alert(request);
            },
            success : function(res) {
                if (res.code === '0') {
                    data = res.data.trackDrawDOList
                    isDrawing = res.data.hasDraw
                    let list = pageCreate(res.data.trackDrawDOList,20,pageValue)
                    $('#exampleTable').bootstrapTable('load',list)
                    layer.msg('抽签完毕')
                } else {
                    parent.layer.alert(res.msg)
                }

            }
        });
    })
}

// 选手信息
function createUser() {
    return new Promise(function (resolve, reject){
        $.ajax({
            type : "get",
            url : prefix +`/signComList`,
            async : false,
            error : function(request) {
                parent.layer.alert(request);
            },
            success : function(res) {
                if (res.code === '0') {
                    resolve(res.data)
                }
            }
        });
    })
}


// 修改状态
function updateFlag(flagUpdate,pageNum) {
    return new Promise(function (resolve, reject){
        $.ajax({
            type : "get",
            url : prefix +`/updateByFlag?flagUpdate=${flagUpdate}&pageNum=${pageNum}`,
            async : false,
            error : function(request) {
                parent.layer.alert(request);
            },
            success : function(res) {
                if (res.code === '0') {
                    console.log('成功')
                }
            }
        });
    })
}

// 抽签
function lottery() {

    // 1随机抽签
    $('#drawBButton').click(function() {
        let index = layer.confirm('确定开始赛道抽签？', {
            btn: ['确定', '取消']
        },async function () {
            if(falg) {
                return layer.msg('抽签中')
            }
            // 检查是否存在相同 type 等于 分页 的数据
            let existingData = Array.from(pageIndex).find(data => data.pages === pageValue);

            if (existingData) {
                // 如果存在相同 type 等于 分页 的数据，则将对应的 indexs 值加 1
                existingData.indexs += 1;
                if(existingData.indexs >= 2) {
                    updateFlag(3,pageValue)
                }
                if(!existingData.types.has(1)) {
                    existingData.types.add(1)
                }
                // if(existingData.indexs === 2){
                //     await updateFlag(pageValue,3)
                //     return
                // }
                // await updateFlag(pageValue,1)
            } else {
                // 如果不存在相同 type 等于 分页 的数据，则添加新数据
                // newData.indexs = dynamicVariables[`indexs${pageValue}`] + 1;
                // pageIndex.add(newData);
                pageIndex.add({pages:pageValue,types:new Set().add(1),indexs:dynamicVariables[`indexs${pageValue}`] +=1})
                updateFlag(1,pageValue)
            }



            timerId = setInterval(updateBNumbers, 100);
            types = 1
            isDrawing = true
            falg = true
            layer.close(index);
            // // 点击停止按钮结束抽签
        })
    });

    // 2随机抽签
    $('#drawCButton').click(function() {
        let index = layer.confirm('确定开始赛道抽签？', {
            btn: ['确定', '取消']
        },async function () {
            if(falg) {
                return layer.msg('抽签中')
            }


            // 检查是否存在相同 type 等于 分页的数据
            let existingData = Array.from(pageIndex).find(data => data.pages === pageValue);

            if (existingData) {
                // 如果存在相同 type 等于 分页 的数据，则将对应的 indexs 值加 1
                existingData.indexs += 1;
                if(existingData.indexs >= 2) {
                    updateFlag(3,pageValue)
                }
                if(!existingData.types.has(2)) {
                    existingData.types.add(2)
                }
                // if(existingData.indexs === 2){
                //     await updateFlag(pageValue,3)
                //     return
                // }
                // await updateFlag(pageValue,1)

            } else {
                // 如果不存在相同 type 等于 分页 的数据，则添加新数据
                pageIndex.add({pages:pageValue,types:new Set().add(2),indexs:dynamicVariables[`indexs${pageValue}`] +=1})
                updateFlag(2,pageValue)
            }


            timerId = setInterval(updateBNumbers, 100);
            types = 2
            isDrawing = true
            falg = true
            layer.close(index);
            // // 点击停止按钮结束抽签
        })
    });


    $('#stopButton').click(async function() {
        let index = layer.confirm('确定停止抽签？', {
            btn: ['确定', '取消']
        }, function () {
            if(isDrawing) {
                if(falg) {
                    if(flag1) {
                        add()
                        flag1 = false
                    }else {
                        trackDrawCreate()
                    }

                    clearInterval(timerId);
                }else {
                    layer.msg('抽签已完成')
                }
            }
            falg = false
            layer.close(index);
        })
    });
}

// 更新序号
async function updateBNumbers() {
    //场次
    let placeNumList = ['1','2']
    //检录
    let trackList = []

    // 选手
    let userList = []

    //获取选手信息
    let rows = $('#exampleTable').bootstrapTable('getData'); // 获取表格数据
    if (rows.length === 0)  return layer.msg('暂无选手信息')
    for (let i = 0; i < rows.length; i++) {
        userList.push(rows[i].name)
        userList.push(rows[i].name2)
    }
    for (let i = 1; i < 100; i++) {
        trackList.push(i)
    }

    let tableRows = $('#exampleTable tbody tr');
    tableRows.each(function(index, row) {
        if(types === 1) {
            let randomNumber1 = getRandomStringFromArray(userList);
            $(row).find('.name').text(randomNumber1);
        }else {
            let name1 = getRandomStringFromArray(placeNumList);
            let registration = getRandomStringFromArray(trackList);
            $(row).find('.placeNum').text(name1);
            $(row).find('.registration').text(registration);

        }

    });

}

// 生成指定范围的随机数
function getRandomNumber(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}


// 随机选择一个字符串
function getRandomStringFromArray(arr) {
    let randomIndex = getRandomNumber(0, arr.length - 1);
    return arr[randomIndex];
}
